package com.wyr.leetcode.step1.number;

public class ConvertToTitleTest {
    /**
     * 给你一个整数 columnNumber ，返回它在 Excel 表中相对应的列名称。
     *
     * https://leetcode.cn/problems/excel-sheet-column-title/description/
     *
     *   类似于，给出十进制数，返回其对应的二进制
     *   现在是，给出十进制数，返回其对应的26进制
     *
     *   在正常的基数转换中，例如从十进制转换到二进制或十六进制，我们通常不需要减一。这是因为这些系统的基数（2或16）都有一个表示0的符号。例如，在二进制中，我们有0和1两个符号；在十六进制中，我们有0到9和A到F共16个符号。
     *
     *   然而，在这个问题中，我们的基数是26，但是我们只有'A'到'Z'共26个符号，并且没有符号可以表示0。所以，我们需要将输入的数减一，以便将0到25映射到'A'到'Z'。
     *
     *   总的来说，是否需要减一取决于我们的基数系统是否有一个表示0的符号。如果有，我们通常不需要减一；如果没有，我们可能需要减一。
     *
     */
    public static String convertToTitle(int columnNumber) {
        // 类似于，给出十进制数，返回其对应的二进制
        // 现在是，给出十进制数，返回其对应的26进制
        StringBuilder sb = new StringBuilder();
        while(columnNumber !=0 ){
            columnNumber--; // 注意这里减一
            int yu = (columnNumber)%26;
            columnNumber /= 26;
            sb.append((char)(yu +'A'));
        }
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        System.out.println(convertToTitle(701));
    }
}
